import java.util.Arrays;

class Solution {
    public int findSubstringInWraproundString(String s) {
        int n = s.length();
        // 状态表示 - 以 i 位置为结尾的所有子串，在 base 中出现的的个数
        int[] dp = new int[n];
        int[] arr = new int[26];
        // 初始化
        Arrays.fill(dp, 1);
        arr[s.charAt(0) - 'a'] = dp[0];
        // 状态转移方程
        for(int i = 1; i < n; i++){
            char ch1 = s.charAt(i - 1);
            char ch2 = s.charAt(i);
            if((ch1 + 1 == ch2) || (ch1 == 'z' && ch2 == 'a')){
                dp[i] += dp[i - 1];
            }
            arr[ch2 - 'a'] = Math.max(arr[ch2 - 'a'], dp[i]);
        }
        int ret = 0;
        for(int i = 0; i < 26; i++){
            ret += arr[i];
        }
        return ret;
    }
}